f3658824a92ae6d5ab71b76ab6b26f07682ae83a,src/main/java/com/continuuity/internal/io/AbstractSchemaGenerator.java,AbstractSchemaGenerator,doGenerate,#TypeToken#Set#,79
Before Change
TypeToken<?> keyType = typeToken.resolveType(typeArgs[0]);
TypeToken<?> valueType = typeToken.resolveType(typeArgs[1]);
return Schema.mapOf(doGenerate(keyType, knownRecords), doGenerate(valueType, knownRecords));
}
// Any Java class, class name as the record name.
After Change
// Java array, use ARRAY schema.
if(rawType.isArray()) {
Schema componentSchema = doGenerate(TypeToken.of(rawType.getComponentType()), knownRecords);
return Schema.arrayOf(Schema.unionOf(componentSchema, Schema.of(Schema.Type.NULL)));
}
if(!( type instanceof Class || type instanceof ParameterizedType )) {
throw new UnsupportedTypeException(
"Type " + type + " is not supported. " +
"Only Class or ParameterizedType are supported."
);
}
// Any parameterized Collection class would be represented by ARRAY schema.
if(Collection.class.isAssignableFrom(rawType)) {
if(!( type instanceof ParameterizedType )) {
throw new UnsupportedTypeException("Only supports parameterized Collection type.");
}
TypeToken<?> componentType = typeToken.resolveType(( (ParameterizedType) type ).getActualTypeArguments()[0]);
Schema componentSchema = doGenerate(componentType, knownRecords);
return Schema.arrayOf(Schema.unionOf(componentSchema, Schema.of(Schema.Type.NULL)));
}
// Java Map, use MAP schema.
if(Map.class.isAssignableFrom(rawType)) {
if(!( type instanceof ParameterizedType )) {
throw new UnsupportedTypeException("Only supports parameterized Map type.");
}
Type[] typeArgs = ( (ParameterizedType) type ).getActualTypeArguments();
TypeToken<?> keyType = typeToken.resolveType(typeArgs[0]);
TypeToken<?> valueType = typeToken.resolveType(typeArgs[1]);
Schema valueSchema = doGenerate(valueType, knownRecords);
return Schema.mapOf(doGenerate(keyType, knownRecords), Schema.unionOf(valueSchema, Schema.of(Schema.Type.NULL)));
}
// Any Java class, class name as the record name.